package leetcode.editor.cn;

//给定一个字符串 s，计算具有相同数量 0 和 1 的非空（连续）子字符串的数量，并且这些子字符串中的所有 0 和所有 1 都是连续的。 
//
// 重复出现的子串要计算它们出现的次数。 
//
// 
//
// 示例 1 : 
//
// 
//输入: "00110011"
//输出: 6
//解释: 有6个子串具有相同数量的连续1和0：“0011”，“01”，“1100”，“10”，“0011” 和 “01”。
//
//请注意，一些重复出现的子串要计算它们出现的次数。
//
//另外，“00110011”不是有效的子串，因为所有的0（和1）没有组合在一起。
// 
//
// 示例 2 : 
//
// 
//输入: "10101"
//输出: 4
//解释: 有4个子串：“10”，“01”，“10”，“01”，它们具有相同数量的连续1和0。
// 
//
// 
//
// 提示： 
//
// 
// s.length 在1到50,000之间。 
// s 只包含“0”或“1”字符。 
// 
// Related Topics 双指针 字符串 👍 418 👎 0

//Java：计数二进制子串
public class CountBinarySubstrings_696{
    public static void main(String[] args) {
        Solution solution = new CountBinarySubstrings_696().new Solution();
        // TO TEST
    }
    
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int countBinarySubstrings(String s) {
        int length=s.length(), count=0;
        for (int i = 0; i < length-1; i++) {
            char c1=s.charAt(i),c2=s.charAt(i+1);
            if(c1!=c2){
                count++;
                int left=i-1,right=i+2;
                while(left>=0 && right<length && s.charAt(left)==c1 && s.charAt(right)==c2){
                    count++;
                    left--;
                    right++;
                }
            }
        }
        return count;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
